#pragma once

namespace Graphics{
	class Texture2D{
	public:
		enum ShaderResourceSlot { SRS_DIFFUSE=0, SRS_NORMALMAP, SRS_SPECULAR, SRS_SHADOWMAP, SRS_NONE };

		Texture2D(std::string &filename, ShaderResourceSlot slot, RenderContext* handle):
			m_slot(slot),m_name(filename){}
		Texture2D(int width, int height, int multisample, ShaderResourceSlot slot, TextureFormat format, RenderContext* handle):
			m_width(width),m_height(height),m_format(format),m_slot(slot),m_multisample(multisample){}
		virtual ~Texture2D(){}

		virtual void setTexture(RenderContext* context) = 0;

		std::string m_name;

		ShaderResourceSlot m_slot;
		TextureFormat m_format;
		
		int m_width,m_height,m_multisample;
		unsigned int m_qualityLevels;
	};

	typedef boost::shared_ptr<Texture2D> Texture2DPtr;
};